// DataLibrary InterfacePlugin Skin - Index

// 識別子：DL_IDX
// 内容  ：インデックス用スキン。

//----------------------------------------------------------------------------//
// Plugin
//----------------------------------------------------------------------------//

//-- プラグインの読み込み処理 --//
DL_LoadSkin_Index:
	Call DL_LoadSkin "Common"  // スキン用の共有サブルーチンを読み込む
Return


//-- プラグインの終了処理 --//
//DL_UnLoadSkin_Index:
//Return


//----------------------------------------------------------------------------//
// HelpText
//----------------------------------------------------------------------------//

//-- ヘルプ用ショートカットキー一覧 --//
DL_HLP_LoadHelpText_Index:
	Local quit_caption = DL_MainTitle & "を終了します"
	Call DL_HLP_SetKeyHelp "右クリック" quit_caption
	Call DL_HLP_SetKeyHelp "BackSpace" quit_caption
	Call DL_HLP_SetKeyHelp "ESC" quit_caption
	Call DL_HLP_SetKeyHelp "F1" "最初の画面に戻る"
	Call DL_HLP_SetKeyHelp "F2" "ヘルプを開く"
	Call DL_HLP_SetKeyHelp "F3" "コンフィグを開く"
	Call DL_HLP_SetKeyHelp "←" "前のページへ"
	Call DL_HLP_SetKeyHelp "→" "次のページへ"
Return


//----------------------------------------------------------------------------//
// Skin-Index
//----------------------------------------------------------------------------//

//-- SkinAction action_id select_id : アクションに合わせてインターフェースを再描画する --//
DL_IDX_SkinAction:
	Switch Args(1)
	Case "NowLoading"
		// DataLibrary起動時に読み込み中表示を表示する
		Call DL_CMN_NowLoading
		Refresh
	Case "StartInterface"
		// スクロールの準備をする
		Call DL_SetScrollData "Index" "PageB" 5 DL_IDX_LibCount
		
		Call DL_CMN_ChangeFontFace "Index"  // 個別フォント指定を適用する
		Call DL_IDX_DisplayInterface        // インターフェースを表示する
	Case "EndInterface"
		Call DL_CMN_ClearFontFace "Index"   // 個別フォント指定を解除する
	Case "StartSubInterface"
		Call DL_CMN_ClearFontFace "Index"   // 個別フォント指定を解除する
	Case "EndSubInterface"
		Call DL_CMN_ChangeFontFace "Index"  // 個別フォント指定を再適用する
		Call DL_IDX_DisplayInterface        // インターフェースを表示し直す
	Case "SelectLibrary"
		Call DL_IDX_LibraryListAction Args(2) "Select"
		Refresh
	Case "SelectScroll"
		Call DL_CMN_PageControllAciton Args(2) "Select"
		Refresh
	Case "RedrawScroll"
		Call DL_IDX_DisplayInterface
		Refresh
	Case "CancelScroll"
		ClearPicture
		Refresh
	Case "SelectHelp"
		Call DL_CMN_ImageButtonAction "Help" "Select"
		Refresh
	Case "SelectConfig"
		Call DL_CMN_ImageButtonAction "Config" "Select"
		Refresh
	Case "SelectQuit"
		Call DL_IDX_CommandAction "Quit" "Select"
		Refresh
	Case "CancelQuit"
		ClearPicture
		Refresh
	EndSw
Return


//-- DisplayInterface : インターフェースを表示する --//
DL_IDX_DisplayInterface:
	Call DL_CMN_ClearDisplay      // 画面を初期化する
	Call DL_CMN_ClearShortcutKey  // ショートカットキーを初期化する
	UnSet DL_CMN_ActionData       // アクションデータを初期化する
	
	// 文字・線の描画方法を保持にする
	Call DL_CMN_SetDrawOption "保持"
	
	// 背景とタイトルを表示する
	Call DL_CMN_Background
	Call DL_CMN_Title DL_MainTitle ""
	
	// ライブラリのリストを表示する
	Local lib_cnt = Min(DL_IDX_LibCount, 5)
	Local space = (350 - (28 * lib_cnt)) \ (lib_cnt + 1)
	Local px = 200
	Local py = 50 + space
	Local i
	For i = DL_ScrollFirst("Index") To DL_ScrollLast("Index")
		Call DL_IDX_LibraryList i px py (480 - px)
		Incr px 20
		Incr py (space + 28)
	Next
	
	// スクロールボタンを表示する
	Local is_prev = DL_GetScrollData("Index", "IsPrev")
	Local is_next = DL_GetScrollData("Index", "IsNext")
	If is_prev Or is_next Then
		Call DL_CMN_PageControll 28 208 "Index"
	EndIf
	
	// 終了コマンドを表示する
	Call DL_IDX_Command "Quit" 0 425 220 DL_GetOptionValue("QuitTitle", "CLOSE") (DL_MainTitle & "を終了する") "Point" "-.bmp"
	
	// アイコンを表示する
	Call DL_CMN_ImageButton "Config" DL_Image["IconConfig"] 395 435 24 24 "コンフィグを表示する" 1
	Call DL_CMN_ImageButton "Help" DL_Image["IconHelp"] 430 435 24 24 "ヘルプを表示する" 1
	
	// 文字・線の描画方法を通常にする
	Call DL_CMN_SetDrawOption "通常"
	
	// ショートカットキーを設定する
	Call DL_CMN_SetShortcutKey 2 "Cancel"    // RightClick
	Call DL_CMN_SetShortcutKey 8 "Cancel"    // BS
	Call DL_CMN_SetShortcutKey 27 "Quit"     // ESC
	Call DL_CMN_SetShortcutKey 113 "Help"    // F2
	Call DL_CMN_SetShortcutKey 114 "Config"  // F3
	If is_prev Then
		Call DL_CMN_SetShortcutKey 37 "Scroll Index -1"  // ←
	EndIf
	If is_next Then
		Call DL_CMN_SetShortcutKey 39 "Scroll Index +1"  // →
	EndIf
Return


//----------------------------------------------------------------------------//
// Interface Subroutine
//----------------------------------------------------------------------------//

//-- LibraryList lib_id x y width : ライブラリを表示する --//
DL_IDX_LibraryList:
	Incr BaseX Args(2)
	Incr BaseY Args(3)
	
	Local lib_id = Args(1)
	Local width = Args(4)
	Local title = DL_GetLibTitle(lib_id)
	Local icon = DL_GetLibIcon(lib_id)
	Local color_id = "Point"
	
	// 表示状態を設定する
	If DL_LibCount[lib_id] = 0 Then
		color_id = "Disable"
	ElseIf DL_LibUnreadCount[lib_id] > 0 Then
		color_id = "Unread"
	EndIf
	
	// アイコンと文字列を表示する
	Font 12pt DL_FontFace["List"]
	Call DL_CMN_Frame 0 0 width 28
	If icon != "" Then
		PaintPicture icon 0 -5 32 32 "保持 透過"
		Call DL_CMN_DrawString 37 7 title color_id
	Else
		Call DL_CMN_DrawString 15 7 title color_id
	EndIf
	
	// ホットポイントを設置する
	If (id != "") And (color_id != "Disable") Then
		Local id = "Library " & lib_id
		Local caption = DL_GetLibComment(lib_id)
		Call DL_CMN_HotPoint id 0 0 width 28 IIf(caption != "", caption, title)
		
		// アクション実行時に必要な情報を記録しておく
		Set DL_CMN_ActionData[id] List(BaseX, BaseY, width, "(" & title & ")", "(" & icon & ")", "(" & caption & ")")
	EndIf
	
	Incr BaseX (Args(2) * -1)
	Incr BaseY (Args(3) * -1)
Return


//-- LibraryListAction id color_id : 記録した情報を元にライブラリを表示する --//
DL_IDX_LibraryListAction:
	Local data = DL_CMN_ActionData[Args(1)]
	Local base_pos = List(BaseX, BaseY)
	Set BaseX LIndex(data, 1)
	Set BaseY LIndex(data, 2)
	
	// アイコンと文字列を表示する
	Font 12pt DL_FontFace["List"]
//	Call DL_CMN_Frame 0 0 LIndex(data, 3) 28
	If LIndex(data, 5) != "" Then
		PaintPicture LIndex(data, 5) 0 -5 32 32 "保持 透過"
		Call DL_CMN_DrawString 37 7 LIndex(data, 4) Args(2)
	Else
		Call DL_CMN_DrawString 15 7 LIndex(data, 4) Args(2)
	EndIf
	
	Set BaseX LIndex(base_pos, 1)
	Set BaseY LIndex(base_pos, 2)
Return


//-- Command id x y width text caption color_id [icon] : ライブラリを表示する --//
DL_IDX_Command:
	Incr BaseX Args(2)
	Incr BaseY Args(3)
	
	Local id = Args(1)
	Local width = Args(4)
	Local text = Args(5)
	Local caption = Args(6)
	Local color_id = Args(7)
	Local icon = Args(8)
	
	Font 12pt DL_FontFace["List"]
	Call DL_CMN_Frame 0 0 width 28
	If icon != "" Then
		PaintPicture icon 0 -5 32 32 "保持 透過"
		Call DL_CMN_DrawString 37 7 text color_id
	Else
		Call DL_CMN_DrawString 15 7 text color_id
	EndIf
	
	// ホットポイントを設置する
	If (id != "") And (color_id != "Disable") Then
		Call DL_CMN_HotPoint id 0 0 width 28 IIf(caption != "", caption, text)
		
		// アクション実行時に必要な情報を記録しておく
		Set DL_CMN_ActionData[id] List(BaseX, BaseY, width, "(" & text & ")", "(" & icon & ")", "(" & caption & ")")
	EndIf
	
	Incr BaseX (Args(2) * -1)
	Incr BaseY (Args(3) * -1)
Return


//-- CommandAction id color_id : 記録した情報を元にライブラリを表示する --//
DL_IDX_CommandAction:
	Local data = DL_CMN_ActionData[Args(1)]
	Local base_pos = List(BaseX, BaseY)
	Set BaseX LIndex(data, 1)
	Set BaseY LIndex(data, 2)
	
	Font 12pt DL_FontFace["List"]
//	Call DL_CMN_Frame 0 0 LIndex(data, 3) 28
	If LIndex(data, 5) != "" Then
		PaintPicture LIndex(data, 5) 0 -5 32 32 "保持 透過"
		Call DL_CMN_DrawString 37 7 LIndex(data, 4) Args(2)
	Else
		Call DL_CMN_DrawString 15 7 LIndex(data, 4) Args(2)
	EndIf
	
	Set BaseX LIndex(base_pos, 1)
	Set BaseY LIndex(base_pos, 2)
Return


